package main

import (
	"fmt"
	"github.com/gorilla/websocket"
	uuid "github.com/satori/go.uuid"
	"net/http"
)

/*
*
启动应用程序，创建 ClientManager 实例并开始处理客户端连接。
使用 http.HandleFunc 处理 /ws 路径上的 WebSocket 连接。
启动 HTTP 服务器监听 12345 端口。
*/
func main() {
	fmt.Println("Starting application...")
	go manager.start()
	http.HandleFunc("/ws", wsPage)
	http.ListenAndServe(":12345", nil)
}

/*
*
wsPage 处理 WebSocket 连接请求：
使用 websocket.Upgrader 升级 HTTP 连接到 WebSocket 连接。
创建 Client 实例，并将其注册到 ClientManager。
启动 read 和 write 方法以处理客户端的读写操作。
*/
func wsPage(res http.ResponseWriter, req *http.Request) {
	conn, error := (&websocket.Upgrader{CheckOrigin: func(r *http.Request) bool { return true }}).Upgrade(res, req, nil)
	if error != nil {
		http.NotFound(res, req)
		return
	}
	client := &Client{id: uuid.NewV4().String(), socket: conn, send: make(chan []byte)}

	manager.register <- client

	go client.read()
	go client.write()
}
